package Game;

import TDALista.DoubleLinkedList;
import TDALista.EmptyListException;
import TDALista.InvalidPositionException;
import TDALista.Position;
import TDALista.PositionList;

public class Tablero {
	
	protected Robot robot;
	protected PositionList<Piso> piso ;
	protected PositionList<Objeto> obj;
	protected PositionList<Destruible> objDestruible;
	protected PositionList<Coleccionable> col;
	protected PositionList<Transitable> trans;
	protected PositionList<Premio> premios;


	
	public Tablero (Robot r){
		robot=r;
		piso = new DoubleLinkedList<Piso>();
		obj= new DoubleLinkedList<Objeto>();
		col = new DoubleLinkedList<Coleccionable>();
		trans = new DoubleLinkedList<Transitable>();
		objDestruible=new DoubleLinkedList<Destruible>();
		premios = new DoubleLinkedList<Premio>();
	}
	
	
	public PositionList<Piso> getPisos() {
		return piso;
	
	}
	
	
	public PositionList<Objeto> getObjetos() {
		return obj;
	}
	
	public PositionList<Destruible> getDestruibles() {
		return objDestruible;
	}
	

	public PositionList<Coleccionable> getObjetosColeccionables() {
		return col;
	
	}
	
	public PositionList<Transitable> getPisosTrans(){
		return trans;
	}
	
	public void agregarTrans(Transitable t)
	{
		trans.addLast(t);
	}
	public void agregarDestruible(Destruible t)
	{
		objDestruible.addLast(t);
		try {
			t.setPosition(objDestruible.last());
		} catch (EmptyListException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void agregarPiso (Piso p){
		piso.addLast(p);
	}
	public void agregarObjeto (Objeto o){
		obj.addLast(o);
	}
	
	public void agregarColeccionable (Coleccionable c){
		
		col.addLast(c);
		try {
			c.setPosition(col.last());
		} catch (EmptyListException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public Robot getRobot(){
		return robot;
	}


	public void agregarPremio(Premio premio) {
		premios.addLast(premio);
		
	}
	
	public PositionList<Premio> getPremios(){
		return premios;
	}
	

	
	public void removePremio (Premio q){
		for (Position<Premio> p :getPremios().positions()){
			if (p.element()==q)
				try {
					premios.remove(p);
				} catch (InvalidPositionException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}


	public void setRobot(Robot t) {
		robot=t;
	}
}
